<?php

use think\db\BaseQuery;

// 这是系统自动生成的公共文件
/*
 * 返回统一格式
 */
function jsonData($code = 1, $msg = '', $data = [])
{
    //code 0代表错误，1代表成功
    $codeV = ['error', 'success'];
    // return json_encode(['code' => $codeV[$code], 'msg' => $msg, 'data' => $data], JSON_UNESCAPED_UNICODE);
    echo json_encode(['code' => $code, 'msg' => $msg, 'data' => $data], JSON_UNESCAPED_UNICODE);
}

/**
 * 把用户输入的文本转义（主要针对特殊符号和emoji表情）
 */
function userTextEncode($str)
{
    if (!is_string($str)) return $str;
    if (!$str || $str == 'undefined') return '';

    $text = json_encode($str); //暴露出unicode
    $text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i", function ($str) {
        return addslashes($str[0]);
    }, $text); //将emoji的unicode留下，其他不动，这里的正则比原答案增加了d，因为我发现我很多emoji实际上是\ud开头的，反而暂时没发现有\ue开头。
    return json_decode($text);
}

/**
 * 解码上面的转义
 */
function userTextDecode($str)
{
    $text = json_encode($str); //暴露出unicode
    $text = preg_replace_callback('/\\\\\\\\/i', function ($str) {
        return '\\';
    }, $text); //将两条斜杠变成一条，其他不动
    return json_decode($text);
}

/**
 * 生成订单号
 */
function get_sn()
{
    return date('YmdHis') . rand(100000, 999999);
}

/**
 * app/api/controller/takeaway/Service.php用到
 * @param string|array $msg
 * @return string
 */
function jsonMsg($msg)
{
    $data = is_string($msg) ? json_decode($msg, true) : $msg;
    return json_encode($data, JSON_UNESCAPED_UNICODE);
}

/**
 * app/api/controller/takeaway/Service.php用到
 * @param array $data
 * @return string
 */
function jsonRet($data)
{
    return json_encode($data, JSON_UNESCAPED_UNICODE);
}

/**
 * app/api/controller/takeaway/ServiceIntra.php用到
 * @param string $data
 * @return array
 */
function jsonDecode($data)
{
    return json_decode($data, true);
}

/**
 * 当前日期
 *
 * @return string
 */
function todayStr()
{
    return date('Y-m-d');
}

/**
 * 当前日期时间
 *
 * @return string
 */
function timeStr()
{
    return date('Y-m-d H:i:s');
}

/**
 * 保留两位小数
 *
 * @param float $num
 * @param string
 */
function priceFormat($num)
{
    return number_format($num, 2, '.', '');
}

/**
 * 检查数据库记录是否已经存在
 *
 * @param BaseQuery $query
 * @param array $where
 * @param array $whereExtra
 * @return bool
 */
function ifDbRecordExist(BaseQuery $query, array $where, array $whereExtra = [])
{
    $count = $query->where($where)->where($whereExtra)->count();
    return boolval($count);
}
